/**
 * ------------------------------------------------------------------
 *Copyright reserved by Emin Technology
 *---- --------------------------------------------------------------

 *PROJECT:		Base
 *FILE:			BaseUndeleteableService.java
 *AUTHOR:		sunny
 *DATE CREATION:2011-12-05
 *DESCRIPTION:	Base service about status

 *==========================================================
 * VERSION CONTROL
 *Number – Date – Author – SVN – Description
 *01 –  2011-12-05 – sunny – xxx – Base service about status
 *-------------------------------------------------------------------------------------------------------
 */
package top.jle.jpa.basic.service;

import java.util.List;

import top.jle.jpa.basic.dao.PageRequest;
import top.jle.jpa.basic.dao.PagedResult;
import top.jle.jpa.basic.dao.PreFilter;
import top.jle.jpa.basic.dao.SortKey;
import top.jle.jpa.basic.entities.UnDeletableEntity;


public interface UndeleteableService<T extends UnDeletableEntity> extends CRUDService<T> {

	void setClazz(Class<T> clazz);
	/**
	 * 通过状态查询实体
	 * @param status
	 *            实体状态 无效:T.STATUS_INVALID
	 *            有效:T.STATUS_VALID
	 * @param sortKeys 排序条件
	 * @return List of entity
	 */
	List<T> findAllByStatus(int status, SortKey... sortKeys);


	/**
	 * 根据状态查询实体的数量
	 * @param status
	 *            实体状态 无效:T.STATUS_INVALID
	 *            有效:T.STATUS_VALID
	 * 
	 * @return count
	 */
	int getCountByStatus(int status);

	/**
	 * 根据指定状态,获得分页结果
	 * @param pageRequest
	 *            分页请求参数 属性:clazz：获得对象的class类型 offset=(当前页数-1)×每页显示条数 limit =
	 *            每页显示条数
	 * @param status
	 *            实体状态 无效:T.STATUS_INVALID
	 *            有效:T.STATUS_VALID
	 * 
	 * @return {@link PagedResult}
	 */
	PagedResult<T> getPageByStatus(PageRequest pageRequest, int status);

	/**
	 * 禁用实体
	 * @param entityId 实体ID
	 */
	void disable(long entityId);
	
	void disable(T entity);
	
	void enableById(Long id);
	
	void enableByIds(Long[] ids);
	
	void enable(T entity);

	PreFilter getStatusFilter();

	
}
